mp4 の構造
とりあえず root の box とそのペイロードサイズを列挙してみた
あと ftyp については内容も読んでみた
実行結果
code::
$ python analyze.py mito.mp4
code::
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'mito.mp4': Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
一致!
コード
code:mp4.py
import sys
from pathlib import Path
def identify_next_box(fp):
box_size = int.from_bytes(fp.read(4), 'big')
if box_size == 0:
return None, 0
box_type = fp.read(4).decode()
header_size = 8
if box_size == 1:
box_size = int.from_bytes(fp.read(8), 'big')
header_size = 16
return box_type, box_size - header_size
def read_ftyp(fp, ftyp_payload_size):
major_brand = fp.read(4).decode()
minor_version = int.from_bytes(fp.read(4), 'big')
compatible_brands = []
for i in range((ftyp_payload_size - 8) // 4):
cb = fp.read(4)
compatible_brands.append(cb.decode())
return major_brand, minor_version, compatible_brands
def main():
video_file = Path(sys.argv1) fp = video_file.open(mode='rb')
while True:
box_type, payload_size = identify_next_box(fp)
if payload_size == 0:
break
if box_type == "ftyp":
continue
fp.seek(payload_size, 1)
fp.close()
if __name__ == "__main__":
main()